package com.xiongjie.msg;

import io.vertx.core.*;
import io.vertx.core.json.JsonObject;

public class MessageDriverConsumerVerticle extends AbstractVerticle {

    //以消息总线的形式发送消息，即eventbus。当这个微服务启动多个时，以集群方式启动，会自动做到负载均衡。
    //这里可以模拟超时，正常消费和失败
    @Override
    public void start() throws Exception {
        //往虚拟地址hello注册消费者
        vertx.eventBus().<String>consumer("hello", message -> {
            System.out.println("消费者接收到的头部是："+message.headers().get("action"));

            double chaos = Math.random();
            JsonObject json = new JsonObject().put("server_by",this.toString());
            if (chaos < 0.6) {
                //回覆消息给发送者
                if (message.body().isEmpty()) {
                    message.reply(json.put("message", "hello"));
                } else {
                    message.reply(json.put("message", "hello " + message.body()));
                }
            } else if (chaos < 0.9) {
                System.out.println("Returning a failure");
                message.fail(500, "message processing failure");
            } else {
                System.out.println("Not replying");
                message.reply(json.put("message", "Not replying"));
            }
        });
    }
}
